java vs scala : differences explained